package chapter_04_singleton.p6_singleton_holder;

/**
 * Created by CharloYao on 2017/3/23.
 *  优势在于getInstance()方法并没有被同步，只是执行了一次静态域的访问，因此延迟初始化并没有增加任何访问开销
 */
public class Singleton {

    private Singleton(){
        System.out.println("Singleton construct");
    }
    //静态内部类
    private static class SingletonHolder{
        private static Singleton singleton = new Singleton();
    }

    public static Singleton getInstance(){
        return SingletonHolder.singleton;
    }

    public static void main(String[] args) {
        /**
         * 第一次调用Singleton.getInstance()的时候，初始化了SingletonHolder类，从而使它的静态变量Singleton得到初始化
         * 由于是静态的域，之后每次调用Singleton.getInstance()，都是拿到的SingletonHolder类的静态变量;
         */
        for(int i=0; i<10; i++){
            Singleton.getInstance();        //构造方法只调用了一次
        }
    }
}
